package com.czxy.Servlet;

import cn.itcast.servlet.BaseServlet;
import com.czxy.Service.FxService;
import com.czxy.domain.Admin;
import com.czxy.domain.User;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.annotation.WebServlet;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;

/**
 * @author 嗨皮骚
 * @version v 1.0
 * @date 2019/4/28
 */
@WebServlet("/fxservlet")
public class FxServlet extends BaseServlet {
    private FxService fxService= new FxService();
    public void fx() throws IOException {
        //从session域中获取user 如果为空就登录
        Admin loginUser = (Admin) getRequest().getSession().getAttribute("adminUser");
        if (loginUser==null){
            getResponse().sendRedirect("/pages/login.html");
            return;
        }

        // 在解析请求之前先判断请求类型是否为文件上传类型
        boolean isMultipart = ServletFileUpload.isMultipartContent(getRequest());
// 文件上传处理工厂
        FileItemFactory factory = new DiskFileItemFactory();
// 创建文件上传处理器
        ServletFileUpload upload = new ServletFileUpload(factory);
// 开始解析请求信息
        List items = null;
        try {
            items = upload.parseRequest(getRequest());
        } catch (FileUploadException e) {
            e.printStackTrace();
        }
        Iterator iter = items.iterator();
        while (iter.hasNext()) {
            FileItem item = (FileItem) iter.next();
            //item.isFormField()返回true说明是文本框参数，普通输入项的数据
            if (item.isFormField()) {
                String fieldName = item.getFieldName();//
                String value = item.getString("UTF-8");//.getString("encType")乱码问题的解决
                getRequest().setAttribute(fieldName, value);
            } else {
                try {
                    //文件数据
                    String fileName = item.getName();
                    String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
                    //UUID生成唯一的文件名
                    //从浏览器获取传递过来的文件名
                    String fileName1 = getRequest().getParameter("fileName");
                    System.out.println(fileName1);
                    String uploadFileName =fileName1;

                    //获取视频简介信息
                    String videoInfo = getRequest().getParameter("videoInfo");

//                    + "." + suffix;  原有后缀名信息
                    //服务器下的某个位置
                    // TODO: 服务器下的文件夹
                    String path = "C:\\项目相关\\视频文件夹\\"+loginUser.getUsername();
                    File file = new File(path);
                    if (!file.exists()) {
                        file.mkdirs();
                    }

                    // 获取item中的上传文件的输入流
                    InputStream in = item.getInputStream();
                    // 创建一个文件输出流
                    FileOutputStream out = new FileOutputStream(path + "/" + uploadFileName);
                    // 创建一个缓冲区
                    byte buffer[] = new byte[1024];
                    // 判断输入流中的数据是否已经读完的标识
                    int len = 0;
                    // 循环将输入流读入到缓冲区当中，(len=in.read(buffer))>0就表示in里面还有数据
                    while ((len = in.read(buffer)) > 0) {
                        // 使用FileOutputStream输出流将缓冲区的数据写入到指定的目录
                        out.write(buffer, 0, len);
                    }
                    // 关闭输入流
                    in.close();
                    in = null;
                    // 关闭输出流
                    out.close();
                    out = null;
                    // 删除处理文件上传时生成的临时文件
                    item.delete();
                    //写入数据库  加入文件路径信息
                    fxService.updateDataBase(loginUser,fileName1,videoInfo,path+"\\"+fileName1);

                }catch (Exception e){
                    System.out.println(e.getMessage());
                    //上传失败提示
                    getResponse().getWriter().print("{\"message\":\"上传失败\",\"flag\":false}");
                    return;
                }
            }
        }
        //上传成功之后代码
        getResponse().getWriter().print("{\"message\":\"上传成功\",\"flag\":true}");
    }
}
